local keyPreFix = "call:user:expire:"
local keyPreFix2 = "call:user:ucid:"
-- 第一个参数
local redisKey1 = KEYS[1]
local modifyStatus1 = ARGV[1]
local currentStatus1 = ARGV[2]
local expire1 = ARGV[3]
local modifyFlag1 = 0
-- 第二个参数
local redisKey2 = KEYS[2]
local modifyStatus2 = ARGV[4]
local currentStatus2 = ARGV[5]
local expire2 = ARGV[6]
local modifyFlag2 = 0
-- 通话UCID
local ucid = string.gsub(ARGV[7], '"', '')
-- 结果集1
local result1 = { redisKey1, modifyStatus1, currentStatus1, expire1, modifyFlag1 }
-- 结果集2
local result2 = { redisKey2, modifyStatus2, currentStatus2, expire2, modifyFlag2 }
-- 先查询预期key-value
local value1 = redis.call('GET', keyPreFix .. redisKey1)
local value2 = redis.call('GET', keyPreFix .. redisKey2)
-- 如果这两个key都有值,需要判断redis存在的值是否与预期值相等
if value1 and value2 then
    --redis.log(redis.LOG_DEBUG, "All keys are exist...")
    if value1 == currentStatus1 and value2 == currentStatus2 then
        -- 两个都符合预期状态,修改并返回
        redis.call('SET', keyPreFix .. redisKey1, modifyStatus1)
        redis.call('SET', keyPreFix .. redisKey2, modifyStatus2)
        result1[3] = modifyStatus1
        result2[3] = modifyStatus2
        result1[5] = 1
        result2[5] = 1
        if expire1 then
            redis.call('EXPIRE', keyPreFix .. redisKey1, expire1)
        end
        if expire2 then
            redis.call('EXPIRE', keyPreFix .. redisKey2, expire2)
        end
    else
        -- 其中一个不符合预期状态
        -- 设置返回值,无修改
        result1[5] = 0
        -- 设置返回值,当前状态
        result1[3] = value1
        -- 设置返回值,无修改
        result2[5] = 0
        -- 设置返回值,当前状态
        result2[3] = value2
    end
else
    -- 如果这两个key都没有没有值,设置预期值并返回结果(如果当前状态不是在线.说明请求已经过期,认为通话中断,A_在线=1,每次流程会有个时间,一定时间未处理,就会过期)
    if not value1 and not value2 and currentStatus1 == '1' and currentStatus2 == '1' then
        -- 设置key1
        redis.call('SET', keyPreFix .. redisKey1, modifyStatus1)
        -- 设置返回值,有修改
        result1[5] = 1
        redis.log(redis.LOG_DEBUG, result1[5])
        -- 如果设置了过期时间
        if expire1 then
            --设置过期时间
            redis.call('EXPIRE', keyPreFix .. redisKey1, expire1)
        end
        -- 设置返回值,当前状态
        result1[3] = modifyStatus1
        -- 设置key2
        redis.call('SET', keyPreFix .. redisKey2, modifyStatus2)
        -- 设置返回值,有修改
        result2[5] = 1
        redis.log(redis.LOG_DEBUG, result2[5])
        -- 如果设置了过期时间
        if expire2 then
            --设置过期时间
            redis.call('EXPIRE', keyPreFix .. redisKey2, expire2)
        end
        -- 设置返回值,当前状态
        result2[3] = modifyStatus2
    else
        -- 如果这两个key其中一个有值,则什么都不做
        -- 设置返回值,无修改
        result1[5] = 0
        -- 设置返回值,当前状态
        result1[3] = value1
        -- 设置返回值,无修改
        result2[5] = 0
        -- 设置返回值,当前状态
        result2[3] = value2
    end
end
if not result1[3] then
    -- 返回空说明异常状态
    result1[3] = "-1"
end
if not result2[3] then
    -- 返回空说明异常状态
    result2[3] = "-1"
end

if result1[5] == 1 and result2[5] == 1 then
    -- 都有修改保存通话话单
    redis.call('SET', keyPreFix2 .. ucid, ucid)
end
return { result1[1], result1[2], result1[3], result1[4], result1[5],
         result2[1], result2[2], result2[3], result2[4], result2[5], '"' .. ucid .. '"' }
